"""
一、动手纠错
1、下面程序的功能是：计算1-20任意数字的阶乘，请找出错误并修改验证
正确如下：
"""
result = 1
num = int(input('请输入一个整数（1～20）：'))
for i in range(2, num + 1):
    result *= i
print(num, '的阶乘为：', result)
"""
2、下面程序的功能是：输出1-50（包含50）的数，每行输出5个，请找出错误并修改验证
正确如下：
"""
k = 1
while k <= 50:
    print(k, end=' ')
    if k % 5 == 0:
        print()
    k += 1
    """
    二、程序填空
    （1）下面程序的功能是：判断输入的年份是闰年还是平年(能被400整除或能被4整除且不能被100整除的年份是闰年，否则是平年)，请将正确答案写在横线处
    """
    year = int(input('请输入年份：'))
    if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
        print(year, '是闰年')
    else:
        print(year, '是平年')
        """
        （2）某商场元旦期间举行满减活动，规则如下：消费低于100元时没有减免，满100元减30元，满300元减100元，满500元减200元，请将正确答案写在横线处
        """
        x = int(input('请输入消费金额：'))
        if x > 0:
            if x < 100:
                cost = x
            elif x < 300:
                cost = x - 30
            elif x < 500:
                cost = x - 100
            else:
                cost = x - 200
            print('您的消费金额为：', x)
            print('应付金额为：', cost)
        else:
            print('输入错误！')
        """
        三、编程训练
        （1）输出“水仙花数”，水仙花数是指1个3位的十进制数，其各个数字的立方和恰好等于该数本身，例如，153是水仙花数，因为153 = 1^3 + 5^3 +3^3
        """
        count = 0
        for i in range(100, 1000):
            b = i // 100
            s = (i % 100) // 10
            g = i % 10
            if i == g ** 3 + s ** 3 + b ** 3:
                count += 1
                print(i, end=' ')
        print('\n水仙花数总共有', count, '个')
        """
        （2）百马百担，现有100匹马需驮运100担货，其中大马驮运3担，中马驮运2担，两匹小马驮一担，问一百匹马中大马、中马、小马各多少？编写程序将每种情况列出来
        """
        n = 0
        for i in range(1, 33):
            for j in range(1, 50):
                k = 100 - j - i
                if ((i * 3 + j * 2 + k / 2) == 100 and (k % 2 == 0)):
                    n += 1
                    print(f'大马{i}匹，中马{j}匹，小马{k}匹')
        print(f'一共有{n}种情况')
        """
        （3）国王的遗产。
        X国是个小国，国王K有6个儿子，在临终前，K国王立下遗嘱：国王的一批牛作为遗产要分给它的6个儿子，其中，大儿子分1/4，二儿子分1/5，三儿子分1/6....直到小儿子分1/9，最后还剩下11头牛，分给管家，请计算国王这批遗产中一共有多少头牛，
        todo:牛是活得，不能一头牛切开分
        """
        x = 6 + 11
        while True:
            if (x % 4 == 0 and x % 5 == 0 and x % 6 == 0 and x % 7 == 0 and x % 8 == 0 and x % 9 == 0) and (
                    x - x / 4 - x / 5 - x / 6 - x / 7 - x / 8 - x / 9 == 11):
                print('国王一共', x, '头牛')
                break
            x += 1